package com.ruoyi.project.warehouse.mapper;

import java.util.List;

import com.ruoyi.project.information.domain.DataReportBean;
import com.ruoyi.project.purchase.domain.pojo.ParamBean;
import com.ruoyi.project.warehouse.domain.RyDepotItem;
import com.ruoyi.project.warehouse.domain.RyDepotItemVo;

/**
 * 入库Mapper接口
 *
 * @author you
 * @date 2022-09-06
 */
public interface RyDepotItemMapper
{
    /**
     * 查询入库
     *
     * @param id 入库主键
     * @return 入库
     */
    public RyDepotItem selectRyDepotItemById(Long id);

    /**
     * 根据主表id查询明细数据
     * @param id 主表id
     *
     */
    public List<RyDepotItem> selectRyDepotItemByDepotId(Long id);

    /**
     * 根据采购质检id查询明细(需要查询关联采购订单的实际采购数量：actual_purchase_num)
     * @param id
     * @return
     */
    public List<RyDepotItem> selectQualityItemByDepotId(Long id);

    /**
     * 根据采购订单id和关联订单id查询明细
     * @param id
     * @return
     */
    public List<RyDepotItem> selectPurchaseInItemByDepotId(Long id,Long linkId);

    /**
     * 根据项目出库单id和关联项目总清单id查询明细
     * @param id
     * @return
     */
    public List<RyDepotItem> selectPurchaseOutItemByDepotId(Long id,Long linkId);

    /**
     * 根据项目总清单id查询总清单及采购、质检、入库、出库环节相关明细数据
     * @param id
     * @return
     */
    public List<RyDepotItem> selectAllDetailByDepotId(Long id);

    /**
     * 新增采购质检单时关联采购订单，根据采购订单id查询明细 ：包括质检信息
     * @param id 主表id
     *
     */
    public List<RyDepotItem> selectOrderItemByDepotId(Long id);

    /**
     * 新增采购入库单时关联采购订单，根据采购订单id查询明细，包括质检信息，入库信息
     * @param id
     * @return
     */
    public List<RyDepotItem> selectItemForInByDepotId(Long id);

    /**
     * 新增项目物品出库单时关联项目总清单，根据项目总清单id查询明细，包括采购信息，质检信息，入库信息，出库信息
     * @param paramBean
     * @return
     */
    public List<RyDepotItem> selectItemForOutByDepotId(ParamBean paramBean);

    /**
     * 查询可以生成订单的项目明细数据
     */
    public List<RyDepotItem> selectItemForOrder(ParamBean paramBean);

    /**
     * 根据主表id删除明细数据
     * @param id 主表id
     *
     */
    public int deleteDepotItemByHeadId(Long id);

    /**
     * 查询入库列表
     *
     * @param ryDepotItem 入库
     * @return 入库集合
     */
    public List<RyDepotItemVo> selectRyDepotItemList(RyDepotItem ryDepotItem);

    /**
     * 根据条件查询订单明细
     */
    public List<RyDepotItemVo> orderDetailList(DataReportBean dataReportBean);

    /**
     * 根据仓库id和物品id查询锁定数量
     */
    public RyDepotItem getLockNumById(RyDepotItem ryDepotItem);

    /**
     * 根据仓库id和物品id查询已入库数量
     */
    public Long getNumByDepotInventoryId(RyDepotItem ryDepotItem);

    /**
     * 根据仓库id和物品id查询入库记录数
     */
    public int getCountByDepotInventoryId(RyDepotItem ryDepotItem);

    /**
     * 新增入库
     *
     * @param ryDepotItem 入库
     * @return 结果
     */
    public int insertRyDepotItem(RyDepotItem ryDepotItem);


    /**
     * 修改入库
     *
     * @param ryDepotItem 入库
     * @return 结果
     */
    public int updateRyDepotItem(RyDepotItem ryDepotItem);

    /**
     * 根据项目总清单id和物品id修改状态
     * @param ryDepotItem
     * @return
     */
    public int updateIsCreateOrder(RyDepotItem ryDepotItem);

    /**
     * 删除入库
     *
     * @param id 入库主键
     * @return 结果
     */
    public int deleteRyDepotItemById(Long id);

    /**
     * 批量删除入库
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteRyDepotItemByIds(Long[] ids);
}
